package com.itzhouwei.mybatis.session;

/**
 * @description:$SqlSession  用来执行SQL，获取映射器，管理事务。
 * ps 通常情况下，我们在应用程序中使用的Mybatis的API就是这个接口定义的方法。
 * @author：zw，微信：yingshengzw
 * @date: 2023/11/30 19:21
 * @Copyright： 公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、分享、成长，让自己和他人都能有所收获！
 */
public interface SqlSession {

    /***
     * <h1>根据指定的sql语句 获取一条记录的封装对象</h1>
     * @param statement
     * @return
     * @param <T>
     */
    <T> T selectOne(String statement);

    /****
     * <h1>根据指定的sql语句 获取一条记录的封装对象，只不过这个方法容许我们可以给sql传递一些参数
     * 一般在实际使用中，这个参数传递的是pojo，或者Map或者ImmutableMap
     * </h1>
     * @param statement
     * @param parameter
     * @return
     * @param <T>
     */
    <T> T selectOne(String statement,Object parameter);


    /***
     * <h1>得到映射器 这个巧妙的使用了泛型 使得类型安全</h1>
     * @param type
     * @return
     * @param <T>
     */
    <T> T getMapper(Class<T> type);
}
